package com.tangyh.basic.alipay.bean;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 要素认证返回信息，根据需求获取
 *
 */

@NoArgsConstructor
@Data
public class ElementIdentify {
    /**
     * 二要素成功代码
     */
    public static String TWO_SUCCESS_CODE = "01";
    /**
     * 三要素成功代码
     */
    public static String THREE_SUCCESS_CODE = "1";

    /**
     * 四要素成功代码
     */
    public static String FOUR_SUCCESS_CODE = "0";


    /**
     * 二要素：返回信息
     */
    private String msg;
    /**
     * 二要素(部分)：
     * <pre>
     *     01:实名认证通过！
     *     02:实名认证不通过！！
     *     205:身份证格式不正确！
     *     204:姓名格式不正确！！
     * </pre>
     */
    private String status;

    /**
     * 三要素(部分)：
     * <pre>
     *     0:成功！
     *     20004:手机号为空或不标准
     *     20010:身份证为空或不标准
     *     20310:请输入合法的名字
     * </pre>
     *
     * <pre>
     *   格式参考：
     *   失败：{ "code": "20310", "message": "请输入合法的名字", "result": null },
     *   成功：{
     *     "code": "0",
     *     "message": "成功",
     *     "result": {
     *       "name": "王小二",
     *       "mobile": "1588888804",
     *       "idcard": "350125*********416",
     *       "res": "2",
     *       "description": "不一致",
     *       "sex": "男",
     *       "birthday": "19990909",
     *       "address": "福建省福州市"
     *     }
     *   }
     * </pre>
     */
    private String code;
    /**
     * 三要素：返回信息
     */
    private String message;
    /**
     * 三要素：详细信息
     */
    private ResultDTO result;

    /**
     * 银行四要素：详细信息
     */
    private DataDTO data;
    /**
     * 银行四要素(部分)：
     * <pre>
     *     0:OK！
     *     14:无效卡号
     * </pre>
     */
    private RespDTO resp;


    /**
     * 三要素：详细信息
     */
    @NoArgsConstructor
    @Data
    public static class ResultDTO {
        /**
         * 姓名
         */
        private String name;
        /**
         * 手机号
         */
        private String mobile;
        /**
         * 身份证号码
         */
        @JSONField(name = "idcard")
        private String idCard;
        /**
         * ???
         */
        private String res;
        /**
         * 要素认证结果描述
         */
        private String description;
        /**
         * 性别
         */
        private String sex;
        /**
         * 出生日期
         */
        private String birthday;
        /**
         * 户籍所在地
         */
        private String address;
    }

    /**
     * 银行四要素：详细信息
     */
    @NoArgsConstructor
    @Data
    public static class DataDTO {
        /**
         * 银行地址
         */
        private String bankUrl;
        /**
         * 银行名称
         */
        private String bankName;
        /**
         * 银行id
         */
        private String bankId;
        /**
         * 银行卡名称
         */
        private String cardName;
        /**
         * 银行卡类型
         */
        private String cardType;
        /**
         * 银行电话
         */
        private String bankPhone;
        /**
         * 银行Logo地址
         */
        private String bankLogo;
    }

    /**
     * 银行四要素返回结果：
     */
    @NoArgsConstructor
    @Data
    public static class RespDTO {
        /**
         * <pre>
         *     0:OK！
         *     14:无效卡号
         * </pre>
         */
        private String code;
        /**
         * 描述
         */
        private String desc;
    }
}
